Graphics systems are known in which two-dimensional images are generated in response to data defining elements within a three-dimensional space. The final two-dimensional result may consist of a very large number of colored picture elements (pixels) which may be viewed on a monitor or printed onto an image carrying medium.
In interactive systems arranged to generate data representing a three-dimensional space, objects appear to move within three-dimensional space in response to input commands. Thus, in such systems, a machine is required to render a two-dimensional image from data representing a three-dimensional space repeatedly, as the position and/or orientation of objects, light sources and view position change in response to input commands. Typically, in an interactive environment, a machine is required to produce output images at a rate of between five to twenty per second.
Traditional machines of this type require a significant amount of computational overhead and, in the past, this requirement has placed significant constraints on system availability. Many techniques have been developed on behalf of the present Assignee, some of which provide the basis for patent applications assigned to the present Assignee, which reduce the computational overhead of an interactive three-dimensional graphics system. These techniques allow three-dimensional interactive graphic systems to be produced without requiring purpose built hardware.
In a system of this type, object geometry undergoes transformations in response to transformation matrices. The geometry is defined by the vertices of a plurality of polygons and, in order to effect a transformation of the object, it is necessary to perform the matrix transformation on each of said vertices. Thus, when a high number of polygons are present, a significant amount of computation is required in order to transform all of the object forming vertices.
As an alternative to transforming vertices, it is also known to transform complete areas of an object which are then rendered into polygons after the transformation has taken place. With this approach, it is not necessary to transform a large number of vertices, provided that sufficient data can be transformed to allow the object to be reconstituted after the transformation has taken place.
An area defined by Bezier curves and referred to as a Bezier patch is a suitable area for this type of transformation. Thus, a relatively large patch, capable of defining a large range of curves, may be identified by specifying sixteen control points, wherein each control point is either an end control point or an intermediate curvature control point for two of the eight Bezier curves defining the patch. A Bezier curve has finite length and is terminated at each of its ends by end control points. The intermediate curvature control points define the extent of curvature which occurs between the end points but the actual curve does not pass through the intermediate curvature control points. It should be noted that a Bezier patch defines a three-dimensional patch and the control points of the patch may be positioned anywhere within three-dimensional space. However, to effect rendering, it is necessary to divide the plane into polygons which are substantially flat or at least flat enough to effect a convincing rendering.
To effect rendering, it is known to recursively or iteratively sub-divide Bezier patches, effectively generating more points which are a closer approximation to the actual curve. Rendering may then be performed by using said points to define flat edged polygons, usually quadrilaterals or, preferably, triangles, whereafter individual pixels are allocated to the regions within the polygons by a process known as scan conversion.
When rendering polygons which have been obtained by sub-dividing an area, it is preferable to render the polygons on an area-by-area basis. Given a sequence of polygons, it is known that it is possible to produce rendering order lists for said polygons. However, a problem exists in that the availability of a list for polygons does not: facilitate the rendering of said polygons on an area-by-area basis.